﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ConnectionLayer;
using System.Data.SqlClient;
using System.Data;
using System.Windows.Forms;

namespace BusinessLayer
{
    public static class ActoActions
    {
        public static bool CriarActo(String IdA, String DepActo, String oficinaActo, String Designacao, String HorasEstimadas)
        {
            ConnectionFactory con = new ConnectionFactory();

            try
            {
                con.GetConnection.Open();
                SqlCommand cmd = con.GetConnection.CreateCommand();
                cmd.CommandText = "insert into Acto values(@IdA,@DepActo,@oficinaActo,@Designacao,@HorasEstimadas)";
                cmd.Parameters.AddWithValue("@IdA", IdA);
                cmd.Parameters.AddWithValue("@DepActo", DepActo);
                cmd.Parameters.AddWithValue("@oficinaActo", oficinaActo);
                cmd.Parameters.AddWithValue("@Designacao", Designacao);
                cmd.Parameters.AddWithValue("@HorasEstimadas", HorasEstimadas);
                cmd.ExecuteNonQuery();
                return true;
            }
            catch (Exception e) { MessageBox.Show(e.Message); return false; }
            finally
            {
                try
                {
                    con.GetConnection.Close();
                }
                catch (Exception e) { MessageBox.Show(e.Message); }
            }
        }
        public static bool AdicionarActoObra(String idObra, String idActo, String idDepartamento, String idOficina, String idFunc)
        {
            ConnectionFactory con = new ConnectionFactory();
            try
            {
                con.GetConnection.Open();
                SqlCommand cmdFunc = con.GetConnection.CreateCommand();
                cmdFunc.CommandText = "select responsavelDep from Departamento where codDep = @idDep and ofic = @idOfic";
                cmdFunc.Parameters.AddWithValue("@idDep", idDepartamento);
                cmdFunc.Parameters.AddWithValue("@idOfic", idOficina);
                object numFunc = cmdFunc.ExecuteScalar();
                if (numFunc != null && numFunc.ToString() == idFunc)
                {
                    SqlCommand cmd = con.GetConnection.CreateCommand();
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandText = "InsertActo";
                    cmd.Parameters.AddWithValue("@idObra", idObra);
                    cmd.Parameters.AddWithValue("@idActo", idActo);
                    cmd.Parameters.AddWithValue("@idDepartamento", idDepartamento);
                    cmd.Parameters.AddWithValue("@idOficina", idOficina);
                    SqlParameter retorno = cmd.Parameters.Add("@res", SqlDbType.Int);
                    retorno.Direction = ParameterDirection.ReturnValue;
                    cmd.ExecuteNonQuery();
                    if ((int)retorno.Value == -1){
                        MessageBox.Show("Não existe funcionário apto para realizar este acto");
                        return false;
                    }
                    return true;
                }
                else {
                    MessageBox.Show("Só o responsavel do departamento pode associar este acto a esta obra");
                    return true;
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
                return false;
            }
            finally
            {
                try
                {
                    con.GetConnection.Close();
                }
                catch (SqlException e) { MessageBox.Show(e.Message); }
            }
        }

        public static bool TerminaActo(String idObra, String idActo, String idOficina, String idDep, String idFunc, String horasReal)
        {
            ConnectionFactory con = new ConnectionFactory();

            try
            {
                con.GetConnection.Open();
                SqlCommand cmd = con.GetConnection.CreateCommand();
                cmd.CommandText = "select ObraContem.funcionario from ObraContem where ObraContem.acto = @idActo and ObraContem.departamento = @idDep and ObraContem.funcionario = @Func and ObraContem.oficinaObra = @idOficina and ObraContem.obra = @idObra";
                cmd.Parameters.AddWithValue("@idActo", idActo);
                cmd.Parameters.AddWithValue("@idDep", idDep);
                cmd.Parameters.AddWithValue("@Func", idFunc);
                cmd.Parameters.AddWithValue("@idOficina",idOficina);
                cmd.Parameters.AddWithValue("@idObra", idObra);
                object o = cmd.ExecuteScalar();
                if(o != null && o.ToString().Equals(idFunc)){
                    cmd = con.GetConnection.CreateCommand();
                    cmd.CommandText = "update ObraContem set Obracontem.estaConcluido = 1, Obracontem.horasRealizadas = @horasReal where ObraContem.acto = @idActo and ObraContem.departamento = @idDep and ObraContem.funcionario = @Func and ObraContem.oficinaObra = @idOficina and ObraContem.obra = @idObra";
                    cmd.Parameters.AddWithValue("@idActo", idActo);
                    cmd.Parameters.AddWithValue("@idDep", idDep);
                    cmd.Parameters.AddWithValue("@Func", idFunc);
                    cmd.Parameters.AddWithValue("@idOficina",idOficina);
                    cmd.Parameters.AddWithValue("@idObra", idObra);
                    cmd.Parameters.AddWithValue("@horasReal", horasReal);
                    cmd.ExecuteNonQuery();
                    return true;
                }
                else{
                    MessageBox.Show("Nao é o funcionario que esta a realizar o Acto");
                    return false;
                }

            }
             catch (Exception e)
            {
                MessageBox.Show(e.Message);
                return false;
            }
            finally
            {
                try
                {
                    con.GetConnection.Close();
                }
                catch (Exception e) { MessageBox.Show(e.Message); }
            }
            
        }
    }
}
